package _8_Gorm框架老郭

import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

/*belongs to 会与另一个模型建立了一对一的连接。 这种模型的每一个实例都“属于”另一个模型的一个实例。
例如，您的应用包含 user 和 company，并且每个 user 能且只能被分配给一个 company。下面的类型就表示这种关系。 注意，在 User 对象中，
有一个和 Company 一样的 CompanyID。 默认情况下， CompanyID 被隐含地用来在 User 和 Company 之间创建一个外键关系，
因此必须包含在 User 结构体中才能填充 Company 内部结构体。*/
// `Usert` 属于 `Company`，`CompanyID` 是外键
//外键约束,通过 constraint 标签配置 OnUpdate、OnDelete 实现外键约束，在使用 GORM 进行迁移时它会被创建
type Usert struct {
	gorm.Model
	Name      string
	CompanyID int
	Company   Company `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;"`
}

type Company struct {
	ID   int
	Name string
}

func main() {
	dsn := "root:123456@tcp(127.0.0.1:3306)/golang_db?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("failed to connect darabase")
	}

	db.AutoMigrate(&Company{}, &Usert{}) //创建表
	//show create table userts; 查看表关系
	//CONSTRAINT `fk_userts_company` FOREIGN KEY (`company_id`) REFERENCES `companies` (`id`)
}
